package com.wsc.juc_001.c_009;

/**
 * synchronized的特性：可见性，原子行，可重入
 * volatile 可见性，不保证原子性
 * 一个同步方法可以调另外一个同步方法  一个线程已有某个对象的锁，再次申请的时候仍然会得到该对象的锁
 * 也就是说明Synchronized是可重入的（指相同线程生成的锁，而不是对象锁）syn

 */
public class Synchronized_09 {

    synchronized void m1(){
        System.out.println(Thread.currentThread().getName() + "m1 start");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        m2();
        System.out.println(Thread.currentThread().getName() + "m1 end");
    }

    synchronized void m2(){
        System.out.println(Thread.currentThread().getName() +"m2 is run");
    }

    public static void main(String[] args) {
        Synchronized_09 synchronized_09 = new Synchronized_09();
        new Thread(()->{
            synchronized_09.m1();
        }).start();
    }
}

